const express = require("express");
const router = express.Router();
const Favorite = require("../controllers/favoriteController");
const favoriteObj = new Favorite();
const Jwt = require("../common/jwt");

// 添加收藏
// 请求地址：http://localhost:3001/api/favorite/add
// 参数：article_id, token
router.post("/add", async (req, res) => {
  let { article_id } = req.body;
  let token = req.headers.token || req.body.token;

  if (!token || !article_id) {
    res.status(400).json({
      code: -1,
      msg: "缺少参数"
    });
    return;
  }

  // 校验token
  let result = new Jwt(token).verifyToken();
  if (result.code == 200) {
    const user_id = result.info.data;
    await favoriteObj.add(article_id, user_id)
      .then(
        result => {
          res.status(200).json(result);
        },
        err => {
          res.status(500).json(err);
        }
      );
  } else {
    res.status(401).json({
      code: -1,
      msg: "您尚未登录"
    });
  }
});

// 取消收藏
// 请求地址：http://localhost:3001/api/favorite/remove
// 参数：article_id, token
router.post("/remove", async (req, res) => {
  let { article_id } = req.body;
  let token = req.headers.token || req.body.token;

  if (!token || !article_id) {
    res.status(400).json({
      code: -1,
      msg: "缺少参数"
    });
    return;
  }

  // 校验token
  let result = new Jwt(token).verifyToken();
  if (result.code == 200) {
    const user_id = result.info.data;
    await favoriteObj.remove(article_id, user_id)
      .then(
        result => {
          res.status(200).json(result);
        },
        err => {
          res.status(500).json(err);
        }
      );
  } else {
    res.status(401).json({
      code: -1,
      msg: "您尚未登录"
    });
  }
});

// 检查是否已收藏
// 请求地址：http://localhost:3001/api/favorite/check
// 参数：article_id, token
router.post("/check", async (req, res) => {
  let { article_id } = req.body;
  let token = req.headers.token || req.body.token;

  if (!article_id) {
    res.status(400).json({
      code: -1,
      msg: "缺少参数article_id"
    });
    return;
  }

  // 如果提供了token，检查该用户是否收藏；否则返回false
  if (token) {
    let result = new Jwt(token).verifyToken();
    if (result.code == 200) {
      const user_id = result.info.data;
      await favoriteObj.check(article_id, user_id)
        .then(
          result => {
            res.status(200).json(result);
          },
          err => {
            res.status(500).json(err);
          }
        );
    } else {
      res.status(200).json({
        code: 200,
        msg: "查询成功",
        isFavorite: false
      });
    }
  } else {
    res.status(200).json({
      code: 200,
      msg: "查询成功",
      isFavorite: false
    });
  }
});

// 获取用户的收藏列表
// 请求地址：http://localhost:3001/api/favorite/user
// 参数：page_num, page_size, token
router.post("/user", async (req, res) => {
  let { page_num, page_size } = req.body;
  let token = req.headers.token || req.body.token;

  if (!token) {
    res.status(401).json({
      code: -1,
      msg: "您尚未登录"
    });
    return;
  }

  // 校验token
  let result = new Jwt(token).verifyToken();
  if (result.code == 200) {
    const user_id = result.info.data;
    page_num = page_num || 1;
    page_size = page_size || 10;

    await favoriteObj.getUserFavorites(user_id, page_num, page_size)
      .then(
        result => {
          res.status(200).json(result);
        },
        err => {
          res.status(500).json(err);
        }
      );
  } else {
    res.status(401).json({
      code: -1,
      msg: "您尚未登录"
    });
  }
});

// 获取文章的收藏数量
// 请求地址：http://localhost:3001/api/favorite/count
// 参数：article_id
router.post("/count", async (req, res) => {
  let { article_id } = req.body;

  if (!article_id) {
    res.status(400).json({
      code: -1,
      msg: "缺少参数article_id"
    });
    return;
  }

  await favoriteObj.getArticleFavoriteCount(article_id)
    .then(
      result => {
        res.status(200).json(result);
      },
      err => {
        res.status(500).json(err);
      }
    );
});

module.exports = router;

